package com.xiaoshuidi.cloud.module.rooms.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.xiaoshuidi.cloud.framework.common.exception.ServiceException;
import com.xiaoshuidi.cloud.framework.common.pojo.CommonResult;
import com.xiaoshuidi.cloud.framework.operatelog.core.annotations.OperateLog;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.RoomEntrustAddUpdateVO;
import com.xiaoshuidi.cloud.module.rooms.controller.app.entrust.dto.PersonalEntrustCreateDTO;
import com.xiaoshuidi.cloud.module.rooms.controller.app.entrust.vo.SendEntrustCaptchaReqVO;
import com.xiaoshuidi.cloud.module.rooms.service.EntrustService;
import com.xiaoshuidi.cloud.module.rooms.service.RoomEntrustService;
import com.xiaoshuidi.cloud.module.system.api.sms.SmsCodeApi;
import com.xiaoshuidi.cloud.module.system.api.sms.SmsSendApi;
import com.xiaoshuidi.cloud.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
import com.xiaoshuidi.cloud.module.system.enums.sms.SmsSceneEnum;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;


import javax.validation.Valid;

import static com.xiaoshuidi.cloud.framework.common.pojo.CommonResult.success;
import static com.xiaoshuidi.cloud.framework.common.util.servlet.ServletUtils.getClientIP;
import static com.xiaoshuidi.cloud.module.rooms.enums.ErrorCodeConstants.CAPTCHA_ERROR;

@Slf4j
@Service
@RequiredArgsConstructor
public class EntrustServiceImpl implements EntrustService {

    private final RoomEntrustService roomEntrustService;
    private final SmsCodeApi smsCodeApi;
    /**
     * 提交个人委托
     * @param personalEntrustCreateDTO
     * @return
     */
    @Override
    public CommonResult<Long> personalEntrust(PersonalEntrustCreateDTO personalEntrustCreateDTO) {
        String captcha = personalEntrustCreateDTO.getCaptcha();
        // 校验验证码
        SmsCodeUseReqDTO reqVO = new SmsCodeUseReqDTO();
        reqVO.setCode(captcha);
        reqVO.setMobile(personalEntrustCreateDTO.getPhone());
        reqVO.setScene(SmsSceneEnum.MEMBER_FORGET_PASSWORD.getScene());
        reqVO.setUsedIp(getClientIP());
        Boolean useSmsCode = smsCodeApi.useSmsCode(reqVO).getCheckedData();
        log.info("委托验证码校验结果：{}", useSmsCode);
        if(!useSmsCode){
            throw new ServiceException(CAPTCHA_ERROR);
        }
        // 保存委托
        RoomEntrustAddUpdateVO roomEntrustAddUpdateVO = BeanUtil.copyProperties(personalEntrustCreateDTO, RoomEntrustAddUpdateVO.class);
        Long entrustId = roomEntrustService.roomEntrustAdd(roomEntrustAddUpdateVO);
        return CommonResult.success(entrustId);
    }
}
